package top.xia17.plugins.fast.common.utils;


import top.xia17.plugins.fast.common.exceptions.BadRequestException;

import java.lang.reflect.Field;
import java.util.*;

/**
 * @author xia17
 * @date 2021/1/19 17:35
 */
public class ObjUtil {


    /**
     * 对象转map
     * @param o 对象
     * @return map
     */
    public static Map<String,Object> toMap(Object o){
        if (o ==null){
            return null;
        }
        HashMap<String, Object> map = new HashMap<>(16);
        Field[] fields = o.getClass().getDeclaredFields();
        try {
            for (Field field : fields) {
                field.setAccessible(true);
                map.put(field.getName(),field.get(o));
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            throw new BadRequestException("obj转map失败");
        }
        return map;
    }


    /**
     * 反射获取所有字段，此方法会获取父类的字段。
     * @param clazz /
     */
    public static List<Field> getAllFields(Class<?> clazz) {
        List<Field> fields = new ArrayList<>();
        if (clazz != null) {
            fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
            getAllFields(clazz.getSuperclass(), fields);
        }
        return fields;
    }


    /**
     * 反射获取所有字段，此方法会获取父类的字段。
     * @param clazz /
     * @param fields 存储获取到的field的集合
     */
    public static void getAllFields(Class<?> clazz, List<Field> fields) {
        if (clazz != null) {
            fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
            getAllFields(clazz.getSuperclass(), fields);
        }
    }


}
